#include <iostream>
#include <vector>
#include <assert.h>

using namespace std;

//枚举记录节点的颜色：红/黑
enum Color
{
    RED,
    BLACK
};

template<class K,class V>
struct RBTreeNode
{
    pair<K,V> _kv;
    RBTreeNode<K,V>* _left;
    RBTreeNode<K,V>* _right;
    RBTreeNode<K,V>* _parent;
    Color _color;

    RBTreeNode(pair<K,V> kv)
    :_kv(kv),
     _left(nullptr),
     _right(nullptr),
     _parent(nullptr),
     _color(BLACK)
    {

    }

};

template<class K,class V>
struct RBTree
{
    typedef RBTreeNode<K,V> Node;
public:
    RBTree()=default;//强制生成默认构造函数

    RBTree(const RBTree<K,V>& x)
    {
        _root=Copy(x._root);
    }

    RBTree<K,V>& operator=(RBTree<K,V> x)  
    {
        swap(_root,x._root);
        return *this;
    }

private:
    Node* _root;
};

